package com.yuanshi.food.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.math.BigDecimal;
import java.util.Date;
import lombok.Data;

/**
 * 优惠券表（存储优惠券模板信息，手册“优惠规则明确化”要求）
 * @TableName coupon
 */
@TableName(value ="coupon")
@Data
public class Coupon {
    /**
     * 优惠券ID（主键）
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 业务标识（固定42位字符串）
     */
    @TableField(value = "biz_code")
    private String bizCode;

    /**
     * 优惠券编号（唯一，格式：COUPON+YYYYMMDD+随机6位，手册“优惠券唯一化”要求）
     */
    @TableField(value = "coupon_no")
    private String couponNo;

    /**
     * 优惠券名称（如“满50减10元券”）
     */
    @TableField(value = "coupon_name")
    private String couponName;

    /**
     * 类型：1-满减券，2-折扣券，3-固定金额券（枚举化优惠券类型）
     */
    @TableField(value = "coupon_type")
    private Object couponType;

    /**
     * 面额（满减券/固定金额券用，元）
     */
    @TableField(value = "amount")
    private BigDecimal amount;

    /**
     * 折扣（折扣券用，如0.8=8折，手册“折扣字段精度”要求）
     */
    @TableField(value = "discount")
    private BigDecimal discount;

    /**
     * 最低使用金额（元，满减券必填）
     */
    @TableField(value = "min_pay")
    private BigDecimal minPay;

    /**
     * 总发行量（非负整数）
     */
    @TableField(value = "total_count")
    private Integer totalCount;

    /**
     * 已使用数量（非负整数，≤总发行量）
     */
    @TableField(value = "used_count")
    private Integer usedCount;

    /**
     * 生效时间
     */
    @TableField(value = "start_time")
    private Date startTime;

    /**
     * 失效时间
     */
    @TableField(value = "end_time")
    private Date endTime;

    /**
     * 优惠券状态：1-启用，2-禁用，3-已过期（枚举化状态）
     */
    @TableField(value = "coupon_status")
    private Object couponStatus;

    /**
     * 逻辑删除：0-未删除，1-已删除
     */
    @TableField(value = "is_deleted")
    private Integer isDeleted;

    /**
     * 创建时间
     */
    @TableField(value = "create_time")
    private Date createTime;

    /**
     * 更新时间
     */
    @TableField(value = "update_time")
    private Date updateTime;
}